package com.cy.common.pool;

import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/** 创建一个对象池类型，然后将此类型的对象交给spring管理
 * @Component注解描述的对象可以交给spring去管理，表示这个对象时一个一般组件
 * 系统底层会通过反射技术创建Bean实例，并给bean起一个名字
 * 反射？java中的一种高级特性，这种特性会借助一组API，获取运行时类的成员
 * 并进行操作
 * 反射最大优势？不能预知未来，但可以驾驭未来
 * java中应用反射技术的起点是什么？获取Class对象(字节码对象)
 */
//@Scope("prototype") //为多实例作用域，适用应用次数非常少的
@Lazy // 描述对象类型时，表示延迟对象的创建，何时需要何时创建，尤其是一些大对象，短时间又不会用到，我们可以才用着这样的策略
@Component //此注解描述的对象可以交给spring去管理，例如创建bean实例，给bean起一个默认名称
public class ObjectPool {

    public ObjectPool(){
        System.out.println("objectpool创建好了");
        Integer a1=100;  //自动封箱 Integer.valueOf(100)
        Integer a2=100;  //a1==a2
        Integer a3=200;
        Integer a4=200; // a3==a4
    }

    // 生命周期方法演示 (并不是每个类都需要，一般池对象需要)
   @PostConstruct //此注解描述的方法为对象生命周期初始化方法，此方法会在构造方法之后执行
    public void init(){
        System.out.println("init()");

    }

    @PreDestroy //此注解描述的方法为对象生命周期销毁方法，此方法会在对象销毁之前执行
    public void destroy() {

        System.out.println("destroy()");

    }




}//此类的配置在被加载到内存时，会将类的配置信息春粗到 Map<string,Beandefinition>
